<!--
========================================================================
 *  Copyright by KNIME AG, Zurich, Switzerland
 *  Website: http://www.knime.com; Email: contact@knime.com
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License, Version 3, as
 *  published by the Free Software Foundation.
 *
 *  This program is distributed in the hope that it will be useful, but
 *  WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, see <http://www.gnu.org/licenses>.
 *
 *  Additional permission under GNU GPL version 3 section 7:
 *
 *  KNIME interoperates with ECLIPSE solely via ECLIPSE's plug-in APIs.
 *  Hence, KNIME and ECLIPSE are both independent programs and are not
 *  derived from each other. Should, however, the interpretation of the
 *  GNU GPL Version 3 ("License") under any applicable laws result in
 *  KNIME and ECLIPSE being a combined program, KNIME AG herewith grants
 *  you the additional permission to use and propagate KNIME together with
 *  ECLIPSE with only the license terms in place for ECLIPSE applying to
 *  ECLIPSE and the GNU GPL Version 3 applying for KNIME, provided the
 *  license terms of ECLIPSE themselves allow for the respective use and
 *  propagation of ECLIPSE together with KNIME.
 *
 *  Additional permission relating to nodes for KNIME that extend the Node
 *  Extension (and in particular that are based on subclasses of NodeModel,
 *  NodeDialog, and NodeView) and that only interoperate with KNIME through
 *  standard APIs ("Nodes"):
 *  Nodes are deemed to be separate and independent programs and to not be
 *  covered works.  Notwithstanding anything to the contrary in the
 *  License, the License does not apply to Nodes, you are not required to
 *  license Nodes under the License, and you are granted a license to
 *  prepare and propagate Nodes, in each case even if such Nodes are
 *  propagated with or for interoperation with KNIME.  The owner of a Node
 *  may freely choose the license terms applicable to such Node, including
 *  when such Node is propagated with or for interoperation with KNIME.
====================================================================
-->
<body>
Contains a node implementation that reads in data from an ASCII file.
<p>There are various settings to specify the format of the data file, all
stored in the {@link org.knime.base.node.io.filereader.FileReaderNodeSettings}
object. They will be set in the file reader's dialog. In there the {@link
org.knime.base.node.io.filereader.FileAnalyzer} does the job of guessing the
settings by looking at the first couple of thousands of lines of the file.
<p>The node provides a {@link org.knime.base.node.io.filereader.FileTable}
at its output port. The actual job of reading in the file is done in the {@link
org.knime.base.node.io.filereader.FileRowIterator}. It reads in the data as
requested, line by line, as specified by the settings.
<p>To During the execution of the node it reads through the entire file
once. The reason for that is, the row iterator fails if an unexpected data is
read. Unexpected data is for example an invalid number, or something it cannot
really deal with. If the filereader would not traverse the entire file once, the
row iterator would fail at some later time, when a successor node is executing -
and it would be very hard for the user to relate the failure of a successor node
to a problem during file reading. Another nice side effect of this is, the
filereader can provide a {@link org.knime.core.data.DataTableSpec} (after
execution) with domain information (like possible values or value ranges) filled
in. The <code>FileTable</code> requires a XML file that specifies the location
and structure of the data to read (see xml package and FileTableSpec.dtd). A
valid <code>URL</code> of this XML file has to be passed to the <code>FileTable</code>
constructor. Another constructor will accept a <code>FileTableSpec</code>.
<p>A <strong><code>FileTableSpec</code></strong> (see FileTableSpec.java)
contains a <code>DataTableSpec</code> (see data package). An <code>URL</code> of
a XML file must be provided to the constructor. The <code>FileTableSpec</code>
object will read in the XML file during construction and extract the table
structure from there, without reading from the actual data location.
<p>The actual job of reading the data from the source is done by the <code>RowIterator</code>
(see FileRowIterator.java). It uses the tokenizer (see <code>FileTokenizer</code>)
to split the stream into columns - the behaviour of the tokenizer must be
specified in the XML file passed to the <code>FileTable</code> constructor.
<p>Also contains the implementation of a node for the workflow which allows
reading data from a location specified by an URL.<br>
<br>
The node makes use of the filereader in the <code>data</code> package (see <code>knime.data.filereader</code>).
This node has one output providing the <code>DataTable</code> read from the
specified source during execution. The node also provides a HiLiteHandler at
this output which was freshly instantiated in the node.<br>
<br>
The node is instantiated at the start of the data flow whenever data should be
read from a file or location. It reads in an XML file from the specified
location which in turn defines the URL of the data to read and the format of the
data.<br>
<br>
</body>
